MyBatis 版本:MyBatis 3.3.0
MyBatis 官方网站(英文):MyBatis 英文官网
MyBatis 官方网站(中文):MyBatis 中文官网
MyBatis 源码:MyBatis 源码
映射器元素
元素名称 | 描述 | 备注 |
---|---|---|
select | 查询语句 | 可以自定义参数,返回结果集等 |
insert | 插入语句 | 执行后返回一个整数,代表插入的条数 |
update | 更新语句 | 执行后返回一个整数,代表更新的条数 |
delete | 删除语句 | 执行后返回一个整数,代表删除的条数 |
parameterMap | 定义参数映射关系 | 不推荐使用 |
sql | 允许定义一部分的SQL,方便引用 | |
resultMap | 描述从数据库结果集中来加载对象 | |
cache | 给定命名空间的缓存配置 | |
cache-ref | 其他命名空间的缓存配置的引用 |
select 元素
元素名称 | 描述 | 备注 |
---|---|---|
id | 和 Mapper 命名空间一起组合唯一性 | |
parameterType | 可以是类全限定名或类别名 | |
parameterMap | 不推荐使用 | |
resultType | 类的全限定名或类别名,可依据 JavaBean 的规范映射 | 不可以和 resultMap 同时使用 |
resultMap | 映射集的引用 | 不可以和 resultType 同时使用 |
flushCache | 在调用 SQL 后,是否要求 MyBatis 清空之前查询的本地缓存和二级缓存 | 布尔值,默认值 false |
useCache | 启动二级缓存的开关,是否要求 MyBatis 将此次结果缓存 | 布尔值,默认值 true |
timeout | 设置超时时间,单位为秒 | 默认值是 JDBC 驱动所设置的秒数 |
fetchSize | 获取记录的总条数设定 | 默认值是 JDBC 驱动所设置的条数 |
statementType | JDBC Statement,取值为 STATEMENT(Statement),PREPARED(PreparedStatement),CallableStatement | 默认值是 PREPARED |
resultType | JDBC resultSet,取值为 FORWARD_ONLY(游标允许向前访问),SCROLL_SENSITIVE(双向滚动,但不及时更新),SCROLL_INSENSITIVE(双向滚动,及时更新) | 默认值是 JDBC 驱动所设置的 |
databaseId | 参考 databaseIdProvider | 一般不需要修改 |
resultOrdered | ||
resultSets |
select 元素传递多个参数
使用 Map 传递参数
Mapper:1
List<User> findUserByMap(Map<String, String> params)
Mapper XML:1
2
3
4<select id="findUserByMap" parameterType="map" resultMap="BaseResultMap">
SELECT id, user_name FROM user_info
WHERE user_name LIKE CONCAT('%', #{userName}, '%')
</select>
使用:1
2
3Map<String, String> paramsMap = new HashMap<String, String>();
paramsMap.put("userName", "me");
userMapper.findUserByMap(paramsMap);
该方式存在一个弊端:业务可读性不强
使用注解传递参数
注解接口 @Param (org.apache.ibatis.annotations.Param)
Mapper:1
List<User> findUserByAnnotations( ("userName") String userName)
Mapper XML:1
2
3
4<select id="findUserByAnnotations" parameterType="map" resultMap="BaseResultMap">
SELECT id, user_name FROM user_info
WHERE user_name LIKE CONCAT('%', #{userName}, '%')
</select>
使用:1
2String userName = "me";
userMapper.findUserByAnnotations(userName);
该方式存在一个弊端:当参数数量很多时,可读性将下降
使用 JavaBean 传递参数
Mapper:1
List<User> findUserByParams(UserParam userParam)
Mapper XML:1
2
3
4<select id="findUserByParams" parameterType="com.example.param.UserParam" resultMap="BaseResultMap">
SELECT id, user_name FROM user_info
WHERE user_name LIKE CONCAT('%', #{userName}, '%')
</select>
使用:1
2
3UserParam userParam = new UserParam();
userParam.setUserName("me");
userMapper.findUserByParams(userParam);
当参数少于等于 3 个时可以使用注解方式传递参数,反之使用 JavaBean 方式传递参数